#include <bits/stdc++.h>
using namespace std;
const int N=5e4+1,M=1e3+1;
int n,m,ans,S[N],T[M],f[M],g[M][26],dp[N][M];
string s,t;
int main()
{
	freopen("neck.in","r",stdin);
	freopen("neck.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>s>>t;
	n=s.size();
	m=t.size();
	for(int i=1;i<=n;i++)	S[i]=s[i-1]-97;
	for(int i=1;i<=m;i++)	T[i]=t[i-1]-97;
	f[0]=-1;
	for(int i=1;i<=m;i++)
	{
		f[i]=f[i-1];
		while(f[i]!=-1&&T[f[i]+1]!=T[i])	f[i]=f[f[i]];
		f[i]++;
	}
	for(int i=0;i<m;i++)
		for(int j=0;j<26;j++)
		{
			if(T[i+1]==j)	g[i][j]=i+1;
			else
			{
				g[i][j]=f[i];
				while(g[i][j]!=-1&&T[g[i][j]+1]!=j)	g[i][j]=f[g[i][j]];
				g[i][j]++;
			}
		}
	memset(dp,-0x3f,sizeof(dp));
	dp[0][0]=0;
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<m;j++)	dp[i][j]=dp[i-1][j];
		for(int j=0;j<m;j++)	dp[i][g[j][S[i]]]=max(dp[i][g[j][S[i]]],dp[i-1][j]+1);
	}
	for(int i=0;i<m;i++)	ans=max(ans,dp[n][i]);
	cout<<ans;
	return 0;
}
